
import java.util.ArrayList;
import java.util.Vector;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Steven
 */
class Joueur implements InterfaceJoueur {

    private Couleur couleur;
    private TypeJoueur typejoueur;
    private Plateau plateau;

    public Joueur(Couleur couleur, Plateau plateau, TypeJoueur typejoueur) {
        this.couleur = couleur;
        this.typejoueur = typejoueur;
        this.plateau = plateau;
    }

    public Coup joue() {
        ArrayList<Coup> maListe = new ArrayList<Coup>();
        boolean possible = false;
        Couleur couleurJoueur=this.couleur;
        Couleur couleurOpposant;
        if(couleurJoueur.compareTo(couleur.NOIR)==0){
            couleurOpposant=couleur.BLANC;
        }
        else{
            couleurOpposant=couleur.NOIR;
        }
        //génère le tableau répertoriant les pionts ennemis
        //0 est la colonne
        //1 est la ligne
        for (int i = 0; i < plateau.getDimension(); i++) {
            for (int j = 0; j < plateau.getDimension(); j++) {
                Couleur test = plateau.plateau[i][j];
                if (test.compareTo(couleurOpposant) == 0) {
                    //Regarde si un coup est possible en diagonale bas-droite
                    //OK
                    if (i-1 >=0 && j - 1 >=0 && plateau.plateau[i - 1][j - 1].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(i+k<8 && j+k<8 && plateau.plateau[i+k][j+k].compareTo(couleur.VIDE)!=0){
                                if(i+k<8 && j+k<8 && plateau.plateau[i+k][j+k].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i-1,j-1));
                                }
                            }
                        }
                    }
                    //Regarde si un coup est possible vers le bas
                    //OK
                    if (i-1 >=0 && plateau.plateau[i - 1][j].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(i+k<8 && j<8 &&plateau.plateau[i+k][j].compareTo(couleur.VIDE)!=0){
                                if(i+k<8 && j<8 && plateau.plateau[i+k][j].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i-1,j));
                                }
                            }
                        }
                    }
                    
                    //Regarde si un coup est possible en diagonale bas-gauche
                    //OK
                    if (i-1 >=0 && j+1<8 && plateau.plateau[i - 1][j + 1].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(i+k<8 && j-k>=0 && plateau.plateau[i+k][j-k].compareTo(couleur.VIDE)!=0){
                                if(i+k<8 && j-k>=0 && plateau.plateau[i+k][j-k].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i-1,j-1));
                                }
                            }
                        }
                    }
                    
                    //Regarde si un coup est possible vers la droite
                    //OK
                    if (j-1>=0 && plateau.plateau[i][j - 1].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(j+k<8 && plateau.plateau[i][j+k].compareTo(couleur.VIDE)!=0){
                                if(j+k<8 && plateau.plateau[i][j+k].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i,j-1));
                                }
                            }
                        }
                    }
                    
                    //Regarde si un coup est possible vers la gauche
                    //OK
                    if (j+1<8 && plateau.plateau[i][j + 1].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(j-k>=0 && plateau.plateau[i][j-k].compareTo(couleur.VIDE)!=0){
                                if(j-k>=0 && plateau.plateau[i][j-k].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i,j+1));
                                }
                            }
                        }
                    }
                    
                    //Regarde si un coup est possible en diagonale haut-droite
                    //OK
                    if (i+1 <8 && j-1>=0 && plateau.plateau[i + 1][j - 1].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(i-k>=0 && j+k<8 && plateau.plateau[i-k][j+k].compareTo(couleur.VIDE)!=0){
                                if(i-k>=0 && j+k<8 && plateau.plateau[i-k][j+k].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i+1,j-1));
                                }
                            }
                        }
                    }
                    
                    //Regarde si un coup est possible vers le haut
                    //OK
                    if (i+1<8 && plateau.plateau[i + 1][j].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(i-k>=0 && plateau.plateau[i-k][j].compareTo(couleur.VIDE)!=0){
                                if(i-k>=0 && plateau.plateau[i-k][j].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i+1,j));
                                }
                            }
                        }
                        }
                    
                    //Regarde si un coup est possible en diagonale haut-gauche
                    //OK
                    if (i+1<8 && j+1<8 && plateau.plateau[i + 1][j + 1].compareTo(couleur.VIDE) == 0) {
                        for (int k = 1; k < plateau.getDimension(); k++) {
                            if(i-k>=0 && j-k>=0 && plateau.plateau[i-k][j-k].compareTo(couleur.VIDE)!=0){
                                if(i-k>=0 && j-k>=0 && plateau.plateau[i-k][j-k].compareTo(couleurJoueur)==0){
                                    maListe.add(new Coup(i+1,j+1));
                                }
                            }
                        }
                        }
                    }
                }
            }
        int higher = maListe.size();
        int random = (int)(Math.random() * (higher+1)-1); 
        Coup coupjoue = maListe.get(random);
        System.out.println(coupjoue.getLigne()+","+coupjoue.getColonne());
        return coupjoue;
    }

    public TypeJoueur getType() {
        return typejoueur;
    }

    public Couleur getCouleur() {
        return couleur;
    }
}
